Rust Crate 使用:structopt

您所在的位置:网站首页 rust structopt Rust Crate 使用:structopt

Rust Crate 使用:structopt

2023-04-01 20:40| 来源: 网络整理| 查看: 265

structopt

Github Crates.io

前言

在前一篇介绍了命令行解析库clap,它支持函数调用模式,宏模式,以及YAML模式,虽然它让我们用极其简单的方式定义传参,但还是需要自己去匹配结果,这过程中不乏结构体,数组转换。所以鄙人又找到了一个基于结构体的解析命令行库,简化我们解析传参结果。

介绍

structopt是一个通过结构体来解析命令行参数。可以说它对clap库进行补充。

使用

或许有些同学不了解clap的使用,我用一个例子简单描述下,这有助于我们理解structopt库的功能与作用。

起初 extern crate clap; use clap::{Arg, App}; fn main() { let matches = App::new("MayApp") .arg(Arg::with_name("verbose") .short("v") .multiple(true) .help("verbosity level")) .args_from_usage("-p, --path=[FILE] 'Target file you want to change'") .get_matches(); if let Some(f) = matches.value_of("path") { println!("path : {}", f); } if _ = matches.occurrences_of("verbose") { 0 => println!("zero"), 1 => println!("one"), _ => println!("more") } }

如果想把匹配后的结果进行管理,便于后面使用,这时就需要自行去创建一个结构体并保存,操作上显得啰嗦。

现在 #[macro_use] extern crate structopt; use structopt::StructOpt; #[derive(Debug, StructOpt)] #[structopt(name = "MayApp", about = "An example of StructOpt usage.")] struct Opt { /// verbosity level #[structopt(short = "v", parse(from_occurrences))] verbose: u32, /// Set speed #[structopt(short = "s", long = "speed", default_value = "42")] speed: f64, /// Input file #[structopt(parse(from_str))] input: String, } fn main() { let opt = Opt::from_args(); println!("{:?}", opt); }

输入与输出:

>>> cargo run --example u-structopt -- -vvv abc >>> Opt { verbose: 3, speed: 42.0, input: "abc" }

现在所有传参都已经解析好,保存在结构体中了,方便我们后续使用。

由于上面初略使用了structopt库,现在你可能有几个疑问,我这边列举几个,其实这些问题你能在structopt文档上一一找到答案:

如何定义命令的几个属性,name, short, default_value,help等。 如何定义一个子命令。 子命令能否分开定义并组合。 如何自定义字符串解析。 如何与clap交互。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3